import request from '@/utils/request'
import { uploadLargeFile, isLargeFile } from '@/utils/upload'

const FILE_URL = '/file'

/**
 * 上传文件，自动判断是否使用分片上传
 * @param {File} file - 要上传的文件
 * @param {Object} options - 上传选项
 * @param {Function} options.onProgress - 进度回调
 * @param {Object} options.extraData - 额外数据，如消息类型
 * @returns {Promise} 返回包含fileId和fileType的对象
 */
export function uploadFile(file, options = {}) {
  // 判断是否为大文件，需要分片上传
  if (isLargeFile(file)) {
    return new Promise((resolve, reject) => {
      uploadLargeFile({
        file,
        uploadUrl: `/api${FILE_URL}/uploadChunk`,
        mergeUrl: `/api${FILE_URL}/mergeChunks`,
        checkUrl: `/api${FILE_URL}/checkChunk`,
        onProgress: options.onProgress,
        onSuccess: resolve,
        onError: reject,
        extraData: options.extraData // 传递额外数据
      })
    })
  } else {
    // 小文件使用普通上传
    const formData = new FormData()
    formData.append('file', file)
    
    // 添加额外数据
    if (options.extraData) {
      for (const key in options.extraData) {
        formData.append(key, options.extraData[key])
      }
    }
    
    return request({
      url: `${FILE_URL}/uploadFile`,
      method: 'post',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      onUploadProgress: progressEvent => {
        if (progressEvent.lengthComputable && options.onProgress) {
          const percentComplete = Math.round((progressEvent.loaded * 100) / progressEvent.total)
          options.onProgress(percentComplete)
        }
      }
    })
  }
}

/**
 * 获取文件URL
 * @param {string} fileId - 文件ID
 * @returns {string} 文件的URL
 */
export function getFileUrl(fileId) {
  // 检查fileId是否已经是完整的URL
  if (fileId && (fileId.startsWith('http://') || fileId.startsWith('https://'))) {
    return fileId;
  }
  
  // 确保fileId存在
  if (!fileId) {
    console.warn('获取文件URL失败：fileId为空');
    return '';
  }
  
  // 使用统一的URL格式
  return `${process.env.VUE_APP_BASE_API || ''}/api${FILE_URL}/download/${fileId}`;
} 